Detect when users take device screenshots
一言で表すと
アクティビティが表示されている間にユーザーがスクリーンショットを撮ったことを検知できる
概要
条件
ハードウェアのボタンを組み合わせて押したときのみ検知できる
ADBやDeviceCaptureによる検出は含まない
実際のスクリーンショットの画像は提供されない、タイミングのみ
Go.icon タスク一覧?からスクショした時は検知してくれないのかな🙄
使い方
AndroidManifestにpermissionを追加
code:xml
<uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" />
ScreenCaptureCallbackを作成
code:kotlin
val screenCaptureCallback = Activity.ScreenCaptureCallback {
// Add logic to take action in your app.
}
onStart / onStopで登録、解除
code:kotlin
override fun onStart() {
super.onStart()
// Pass in the callback created in the previous step
// and the intended callback executor (e.g. Activity's mainExecutor).
registerScreenCaptureCallback(mainExecutor, screenCaptureCallback)
}
override fun onStop() {
super.onStop()
unregisterScreenCaptureCallback(screenCaptureCallback)
}
そもそもスクリーンショットを撮らせたくなかったらLayoutParams.FLAG_SECUREを使う
code:kotlin
activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE)
これはAPI1からある
画面収録もできなくなる
これが設定されてるときはScreenCaptureCallbackは呼び出されない
Mori Atsushi.icon デバッグ時に鬼ほどめんどくさいので、デバッグビルドはオフにするか、デバッグメニューから切り替えられると便利です
何に使うの
ドキュメント内:誰かがメッセージの会話のスクリーンショットを撮ったことを別のユーザーに警告する
Mori Atsushi.icon そんなトリッキーなことある…?
Snapchatはそういう機能を提供しているそう
スクリーンショットフォルダをFileObserverで監視して通知している可能性が高い
よりセキュアな方法を提供したかったっぽい
Mori Atsushi.icon ユーザの行動のトラッキングとか…?
この画面でよくスクリーンショットが撮られているので、画像DL機能を作ろうとか
Mori Atsushi.icon このタイミングでUIを変えてもスクリーンショットは変わらなさそう?
気になるポイント
saku.icon ユーザープライバシー的にこれはOKなのかな・・・
saku.icon 画像取れるわけではないからいいのかな。
メモ
コメント